1、减绳子
分析：这题得事先判断一下，绳子剪完之后乘积会不会超过int型的表示范围，如果超过了，肯定得取余；
所以思想有二：
第一种，对于不超过的 ，直接使用动态规划即可，f(i)的值为max(f(i-1)*f(1),...,f(1)*f(i-1));
第二种：对于超过的，就不能简单的使用动态规划了；得分析，经过数学分析，容易得出当每段为3大小时乘积最大，
但是 每段大小为3也是需要分析得，就是分为大小为3时，可能会有余数，3中情况，余数为0，余数为1，余数为2，
当余数为0时，不需要处理，也就是段数*3；
当余数为1时，那么1*3<2*2的，所以得注意一下啊；
当余数为2时，那么就是2*3；
class Solution {
public:
    int cuttingRope(int n) {
        if(n<=3)
            return n-1;
        //计算的是余数
        int a=n%3;
        //计算可以分的段数
        int num=n/3;
        long ret=1;
        int p=1000000007;
        for(int i=1;i<num;i++)
        {
            ret=ret*3%p;
        }
        if(a==0)
            return (int)(ret*3%p);
        else if(a==1)
            return (int)(ret*4%p);
        return (int)(ret*6%p);
    }
};